package com.ruoyi.advertisement.service;

import java.util.List;
import com.ruoyi.advertisement.domain.AdvertisementStrategy;

/**
 * 广告投放策略Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IAdvertisementStrategyService 
{
    /**
     * 查询广告投放策略
     * 
     * @param strategyId 广告投放策略主键
     * @return 广告投放策略
     */
    public AdvertisementStrategy selectAdvertisementStrategyByStrategyId(Long strategyId);

    /**
     * 查询广告投放策略列表
     * 
     * @param advertisementStrategy 广告投放策略
     * @return 广告投放策略集合
     */
    public List<AdvertisementStrategy> selectAdvertisementStrategyList(AdvertisementStrategy advertisementStrategy);

    /**
     * 新增广告投放策略
     * 
     * @param advertisementStrategy 广告投放策略
     * @return 结果
     */
    public int insertAdvertisementStrategy(AdvertisementStrategy advertisementStrategy);

    /**
     * 修改广告投放策略
     * 
     * @param advertisementStrategy 广告投放策略
     * @return 结果
     */
    public int updateAdvertisementStrategy(AdvertisementStrategy advertisementStrategy);

    /**
     * 批量删除广告投放策略
     * 
     * @param strategyIds 需要删除的广告投放策略主键集合
     * @return 结果
     */
    public int deleteAdvertisementStrategyByStrategyIds(Long[] strategyIds);

    /**
     * 删除广告投放策略信息
     * 
     * @param strategyId 广告投放策略主键
     * @return 结果
     */
    public int deleteAdvertisementStrategyByStrategyId(Long strategyId);

    /**
     * 根据设备ID查询广告策略
     * 
     * @param deviceId 设备ID
     * @return 广告策略
     */
    public AdvertisementStrategy selectStrategyByDeviceId(String deviceId);

    /**
     * 查询启用状态的策略列表
     * 
     * @return 策略列表
     */
    public List<AdvertisementStrategy> selectEnabledStrategies();

    /**
     * 启用/禁用策略
     * 
     * @param strategyId 策略ID
     * @param status 状态(0-禁用,1-启用)
     * @return 结果
     */
    public int changeStatus(Long strategyId, Integer status);

    /**
     * 复制策略
     * 
     * @param strategyId 源策略ID
     * @param newStrategyName 新策略名称
     * @return 结果
     */
    public int copyStrategy(Long strategyId, String newStrategyName);

    /**
     * 获取策略统计信息
     * 
     * @return 统计信息
     */
    public StrategyStatistics getStrategyStatistics();

    /**
     * 策略统计信息类
     */
    public static class StrategyStatistics {
        private int totalStrategies;     // 总策略数
        private int enabledStrategies;   // 启用策略数
        private int linkedDevices;       // 关联设备数
        private int linkedMaterials;     // 关联素材数

        // getter和setter方法
        public int getTotalStrategies() {
            return totalStrategies;
        }

        public void setTotalStrategies(int totalStrategies) {
            this.totalStrategies = totalStrategies;
        }

        public int getEnabledStrategies() {
            return enabledStrategies;
        }

        public void setEnabledStrategies(int enabledStrategies) {
            this.enabledStrategies = enabledStrategies;
        }

        public int getLinkedDevices() {
            return linkedDevices;
        }

        public void setLinkedDevices(int linkedDevices) {
            this.linkedDevices = linkedDevices;
        }

        public int getLinkedMaterials() {
            return linkedMaterials;
        }

        public void setLinkedMaterials(int linkedMaterials) {
            this.linkedMaterials = linkedMaterials;
        }
    }
} 